Attribute VB_Name = "ProvaCorel"
'Prova chiamata a funzione che usa un array di interi inizializzato da Visual Basic
Declare Sub useIntArray Lib _
"C:\Users\Mirko\Documents\Visual Studio 2010\Projects\MyDLL\Release\HelloWorld.dll" _
(ByRef a() As Long)
'Prova chiamata a funzione che usa una matrice di interi inizializzata da Visual Basic
Declare Sub useIntMat Lib _
"C:\Users\Mirko\Documents\Visual Studio 2010\Projects\MyDLL\Release\HelloWorld.dll" _
(ByRef m() As Long)
'Prova chiamata a funzione che restituisce un array inizializzato dalla stessa funzione C/C++
Declare Function returnIntArray Lib _
"C:\Users\Mirko\Documents\Visual Studio 2010\Projects\MyDLL\Release\HelloWorld.dll" _
() As Long()
'Prova chiamata a funzione che restituisce una matrice inizializzato dalla stessa funzione C/C++
Declare Function returnIntMat Lib _
"C:\Users\Mirko\Documents\Visual Studio 2010\Projects\MyDLL\Release\HelloWorld.dll" _
() As Long()
Sub Prova()
    'Istanza dell'array non inizializzato
    Dim hw() As Long

    'Chiamata a funzione DLL C/C++
    hw = returnIntArray()
    useIntArray hw
    
    'Cercare di gestire le eccezioni con o con try ... catch ... finally
    On Error Resume Next
    'Controllo dei limiti superiore e inferiore
    MsgBox "I da " & UBound(hw) & " a " & LBound(hw)
    
    'Err = 9, upper bound non esiste
    If Err = 9 Then
        MsgBox "Errore all'interno della DLL!"
    Else
        Dim msg As String
        'Visualizzazione
        For i = LBound(hw) To UBound(hw)
            msg = msg & " " & hw(i)
        Next
        MsgBox msg
        'Cancellazione
        Erase hw
    End If
    End Sub

Sub Prova2()
    'Istanza dell'array (matrice) non inizializzato
    Dim hw() As Long
    hw = returnIntMat()
    useIntMat hw
    
    On Error Resume Next
    MsgBox "I da " & UBound(hw, 1) & " a " & LBound(hw, 1) _
    & "; J da " & UBound(hw, 2) & " a " & LBound(hw, 2)
    
    If Err = 9 Then
        MsgBox "Errore all'interno della DLL!"
    Else
        Dim msg As String
        For i = LBound(hw, 1) To UBound(hw, 1)
            For j = LBound(hw, 2) To UBound(hw, 2)
                msg = msg & " " & hw(i, j)
            Next
        Next
        MsgBox msg
        Erase hw
    End If
End Sub
